// const strictAssert = require('node:assert/strict') // 严格模式
// strictAssert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5])

// const assert = require('node:assert') // 非严格模式
// assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5])
// assert.strictEqual(1, '1')

// const { message } = new assert.AssertionError({ actual: 1, expected: 2, operator: 'strictEqual' })

// // 验证错误的输出
// try {
//   assert.strictEqual(1, 2)
// } catch (err) {
//   console.log(err instanceof assert.AssertionError)
//   assert(err instanceof assert.AssertionError)
//   console.log(err.message === message)
//   assert.strictEqual(err.message, message)
//   console.log(err.name === 'AssertionError')
//   assert.strictEqual(err.name, 'AssertionError')
//   console.log(err.actual === 1)
//   assert.strictEqual(err.actual, 1)
//   console.log(err.expected === 2)
//   assert.strictEqual(err.expected, 2)
//   console.log(err.code === 'ERR_ASSERTION')
//   assert.strictEqual(err.code, 'ERR_ASSERTION')
//   console.log(err.operator === 'strictEqual')
//   assert.strictEqual(err.operator, 'strictEqual')
//   console.log(err.generatedMessage === true)
//   assert.strictEqual(err.generatedMessage, true)
// }

// CallTracker 类 已废弃
// const tracker = new assert.CallTracker()

// function func() {}

// const callsfunc = tracker.calls(func, 1)

// callsfunc()

// process.on('exit', () => {
//   tracker.verify()
// })

// assert()为assert.ok()的别名
// console.log(NaN === NaN) // false
// assert.strictEqual(NaN, NaN) // true
// assert.equal(NaN, NaN) // true
// console.log(undefined === undefined) // true
// assert.strictEqual(undefined, undefined) // true
// assert.equal(undefined, undefined) // true
// console.log(null === null) // true
// assert.strictEqual(null, null) // true
// assert.equal(null, null) // true
// console.log(null === undefined) // false
// assert.strictEqual(null, undefined) // AssertionError [ERR_ASSERTION]:  Expected values to be strictly equal
// assert.equal(null, undefined) // true

// 非严格模式下，deepEqual类似 == 比较，0==false true| 1==true true| 0==null false| 0==undefined false| false==null false| false==undefined false| null==undefined true
// strictEqual类似 === 比较
// assert.deepEqual('+00000000', false)

// const obj1 = { a: { b: 1 } }
// const obj2 = { a: { b: 2 } }
// const obj3 = { a: { b: 1 } }
// const obj4 = { __proto__: obj1 }
// console.log(obj4)

// assert.deepEqual(obj1, obj1) // 通过
// assert.deepEqual(obj1, obj3) // 通过
// assert.deepEqual(obj1, obj2) // false
// assert.deepEqual(obj1, obj4) // false
// assert.deepEqual(obj1, obj5) // false

// assert.deepStrictEqual(new String('foo'), Object('foo')) // true

const assert = require('node:assert/strict')

// doesNotMatch 判断字符串是否不匹配正则表达式 和 match相反

// assert.doesNotMatch('I will fail', /fail/)
// AssertionError [ERR_ASSERTION]: The input was expected to not match the ...

// assert.doesNotMatch(123, /pass/)
// AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.

// assert.doesNotMatch('I will pass', /different/)
// OK

// doesNotThrow 断言函数不会抛出错误 否则抛出错误
// assert.doesNotThrow(() => {
//   throw new TypeError('Wrong value')
// }, TypeError)

// assert.ifError 传入的值为非null和非undefined时抛出传入的值，否则不做任何操作
// assert.ifError(null) // OK
// assert.ifError(undefined) // OK
// assert.ifError(0) // AssertionError [ERR_ASSERTION]: ifError got unwanted exception: 0

// assert.ok 判断是否为真值 和 assert()相同
// assert.ok(true) // OK
// assert.ok(1) // OK
// assert.ok('any string') // OK
